<?php
include_once 'Retriever.php';
include_once '../Model/Route.php';
////include_once '../Utility/simplehtmldom/simple_html_dom.php';
include_once '../Model/Location.php';
include_once '../AtacAPI/TravelTime.php';

class ACtraveltime extends Retriever {

		public $link;
		public $text;
		public $it_da;
		public $it_a;
		
		
	function __construct() {
		
		
	}
/*	
	// vecchio metodo, non usato per tempi di percorrenza Android
	public function connectToAtac($link){
		//Costruisco l'url con i parametri giusti
		$url= "http://atacmobile.it/atacmobile.php?nav=3&service=tempi&id_it=$link&t=selit#selit";
								
		$pageContent = $this->getHTMLPageFromURL($url);	
	
		if ($pageContent==false) {
				//throw new CommunicationException ("ACBusWaitingTimes: No Response from ATAC", 0);
				return null;
		
		}	
		
		// TODO impiega tempo
		$text = str_get_html($pageContent);

		$pos = strpos($text,"servizio");
		$pos2 = strpos($text,"attivo");
		$pos3 = strpos($text,"non");

		//Il problema riguarda l'intero servizio
		if(($pos==true) && ($pos2==true) && ($pos3==true)) {
			throw new CommunicationException ("ACtraveltime: No Response from ATAC", 0);
			return null;
		}
			
		//Il problema riguarda solo quella richiesta
		if ((strpos($text, "tecnici")==true) && ((strpos($text, "problemi")==true))) {
			throw new CommunicationException ("ACtraveltime: Service Not Available", 0);
			return null;
		}

		return $text;

	}
	
	function parsing($text,$it_da,$it_a){
		
		$inizio = strstr ($text, 't=seltr#seltr">');
		if($inizio==FALSE)
			return 0;
		
		$inizionum = strpos ($text, 't=seltr#seltr">');
		$fine = strpos($inizio,'<p>I tempi sono ricalcolati ogni 5 minuti');
		$blocco = substr($text, $inizionum+strlen('t=seltr#seltr">'),$fine-strlen('t=seltr#seltr">'));
		$arco = strstr($blocco, $it_a);
		$posi = strpos($arco,'width="15" alt="*"/>');
		$minuti = substr($arco,$posi+strlen('width="15" alt="*"/>'),2);
		$minuti = trim($minuti);
		
		if($minuti == '-' || $minuti == 'Da') {
			return 0;
		} else {
			$condizioni = strstr($arco,'minuti');
			$posparentesi = strpos($condizioni,')');
			$condizione = substr($condizioni, 6, $posparentesi - 6);
			$condizione = trim($condizione);
			$condizione = str_replace('(', '', $condizione);
			
			if($condizione == '') {
				return 0;
			} else {
				$time[] = $minuti;
				$time[] = $condizione;
				return $time;
			}
		}
	}
	
*/
/*
	public function newParser_NEW($xpath, $da, $a)
	{
        	$travel = new TravelTime;
       	 	$travel_info_out = $travel->getListaTratte();

	}
*/
	// nuovi metodi usati per la versione Android
	// clarauso
	public function newConnectToAtac($link) {
		// utilizzato per evitare la visualizzazione di alcuni warning dipendenti
		// dal documento xhtml fornito da ATAC
		error_reporting(E_ERROR);
	
		// aggiornamento dicembre 2012 con nuova struttura sito (da atacmobile.it a muovi.roma.it)
		// $url = "http://atacmobile.it/atacmobile.php?nav=3&service=tempi&id_it=$link&t=selit#selit";
		$sel = $link + 1;
		$url = "http://muovi.roma.it/tempi/itinerario/$sel/?nav=2#selit";
	
		// print_r utile solo per controllare quale tratto atac viene utilizzato
		// print_r($url);
	
		$data = $this->getHTMLPageFromURL($url);
		$xhtml = new DOMDocument();
		$xhtml->loadHTML($data);
	
		$xpath = new DOMXPath($xhtml);
	
		// atacmobile.it
		// $texts = $xpath->query("//body/div[@class='main']/p");
		// aggiornamento dicembre 2012 con nuova struttura sito (da atacmobile.it a muovi.roma.it)
		$texts = $xpath->query("//body/div[@id='main']/p");
		 
		if(strpos($texts->item(0)->nodeValue, "attualmente non") !== FALSE)
			throw new CommunicationException ("ACtraveltime: No Response from ATAC", 0);
			
		return $xpath;
	}
	public function sec_to_min($orario)
	{
		$min = $orario / 60;
		$r = $orario % 60;
		if ( $r > 30)
			$min = $min + 1;
		return floor($min);
	}
	public function newParser($xpath, $da, $a) {
	
			$ac_travel = new TravelTime;		

			$itinerario_out = $ac_travel->getListaItinerari();
			if ($itinerario_out)
			{
        			foreach($itinerario_out as $itinerario)
        			{
                			$info_array = $itinerario->getTravelInfo();
	
		                        foreach($info_array as $info)
                		        {
						$string = $info->getDescrizione();
						if ( strpos($string, $da) !== false && strpos($string, $a) !== false) {
							$minuti = $info->getTempoPercorrenza();
							if ($minuti > 0)
								$min = $this->sec_to_min($minuti);
							else
								$min = 0;
							return $min;
						}
                        		}
                                
        			}
			}
		return 0;
	}
}
?>
